package com.cnap.model.schedule;

import cn.hutool.core.text.CharSequenceUtil;
import com.cnap.model.application.ValidInterface;

/**
 * 操作类型枚举
 *
 * @author xc
 **/
public enum OperateTypeEnum implements ValidInterface {
    /**
     * 暂停
     */
    SUSPEND("suspend", StrategyStatusEnum.PAUSED.getStatus(), "暂停"),
    /**
     * 恢复
     */
    RESUME("resume", StrategyStatusEnum.STARTING.getStatus(), "恢复"),
    /**
     * 删除
     */
    DELETE("delete", StrategyStatusEnum.DELETING.getStatus(), "删除"),
    /**
     * 删除命名空间
     */
    DELETE_NS("delete_ns", StrategyStatusEnum.DELETING.getStatus(), "删除"),
    /**
     * 删除，但是不发送响应，只在恢复微服务到其他集群，需要删除原来集群上的微服务的时候使用
     */
    DELETE_NO_RESPONSE("delete_no_response", StrategyStatusEnum.DELETING.getStatus(), "删除"),
    /**
     * 重新部署
     */
    RE_DISTRIBUTE("reDistribute", StrategyStatusEnum.STARTING.getStatus(), "重新部署"),

    /**
     * 非法
     */
    INVALID("invalid", -1, "非法"),
    ;

    private final String type;
    // 需要与
    private final int statusValue;
    private final String message;

    OperateTypeEnum(String type, int statusValue, String message) {
        this.type = type;
        this.statusValue = statusValue;
        this.message = message;
    }

    /**
     * get
     *
     * @return Type
     */
    public String getType() {
        return type;
    }

    /**
     * get
     *
     * @return StatusValue
     */
    public int getStatusValue() {
        return statusValue;
    }

    /**
     * get
     *
     * @return Message
     */
    public String getMessage() {
        return message;
    }

    /**
     * 获取枚举
     *
     * @param type 类型字符串
     * @return 枚举
     */
    public static OperateTypeEnum getOperateTypeFromType(String type) {
        OperateTypeEnum[] operateTypeEnums = OperateTypeEnum.values();
        for (OperateTypeEnum operateTypeEnum : operateTypeEnums) {
            if (String.valueOf(operateTypeEnum.getType()).equals(type)) {
                return operateTypeEnum;
            }
        }
        return OperateTypeEnum.INVALID;
    }

    @Override
    public boolean isValid(String value) {
        if (CharSequenceUtil.isEmpty(value)) {
            return false;
        }
        OperateTypeEnum[] operateTypeEnums = OperateTypeEnum.values();
        for (OperateTypeEnum operateTypeEnum : operateTypeEnums) {
            if (String.valueOf(operateTypeEnum.getType()).equals(value)) {
                return true;
            }
        }
        return false;
    }
}
